package com.jvyou.framework.controller;

import cn.dev33.satoken.stp.StpUtil;
import com.jvyou.common.annotation.Log;
import com.jvyou.common.core.domain.model.LoginUser;
import com.jvyou.common.core.domain.model.Result;
import com.jvyou.common.enums.log.BusinessType;
import com.jvyou.common.utils.SecurityUtils;
import com.jvyou.framework.domain.dto.LoginDto;
import com.jvyou.framework.domain.vo.LoginVo;
import com.jvyou.framework.service.AuthService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;


/**
 * @author 橘柚
 * @since 2025/3/3 10:51
 */
@RestController
@Slf4j
@RequestMapping("/auth")
@RequiredArgsConstructor
public class AuthController {

    private final AuthService authService;

    /**
     * 登录接口
     *
     * @param loginDto 登录请求体
     * @return token
     */
    @PostMapping("/login")
    @Log(title = "登录接口", businessType = BusinessType.OTHER)
    public Result<LoginVo> doLogin(@Valid @RequestBody LoginDto loginDto) {
        log.info("登录参数：{}", loginDto);
        return authService.doLogin(loginDto);
    }
//
//    /**
//     * 手机验证码登录
//     *
//     * @param smsLoginDto 登录请求体
//     * @return token
//     */
//    @PostMapping("/sms/login")
//    @Log(title = "手机验证码登录", businessType = BusinessType.OTHER)
//    public Result<LoginVo> doSMSLogin(@RequestBody @Valid SMSLoginDto smsLoginDto) {
//        log.info("手机验证码登录参数：{}", smsLoginDto);
//        return authService.doSMSLogin(smsLoginDto);
//    }

    /**
     * 获取当前登录的用户信息
     *
     * @return token
     */
    @GetMapping("/currentUser")
    @Log(title = "获取当前登录的用户信息", businessType = BusinessType.OTHER)
    public Result<LoginUser> currentUser() {
        log.info("获取当前登录的用户信息");
        return Result.success(SecurityUtils.getLoginUser());
    }

    /**
     * 退出登录
     *
     * @return token
     */
    @GetMapping("/logout")
    @Log(title = "退出登录", businessType = BusinessType.OTHER)
    public Result<Boolean> logout() {
        log.info("退出登录：{}", StpUtil.getLoginId());
        StpUtil.logout();
        return Result.success(true);
    }
//
//    /**
//     * 重置密码
//     *
//     * @param resetPasswordDto 重置密码参数
//     * @return 重置密码结果
//     */
//    @PutMapping("/resetPassword")
//    @Log(title = "重置密码", businessType = BusinessType.OTHER)
//    @SaCheckLogin
//    public Result<Boolean> resetPassword(@RequestBody @Valid ResetPasswordDto resetPasswordDto) {
//        return Result.success(authService.resetPassword(resetPasswordDto));
//    }
//
//
//    /**
//     * 发送短信验证码
//     *
//     * @return token
//     */
//    @Log(title = "发送短信验证码", businessType = BusinessType.OTHER)
//    @GetMapping("/sendSMSCode/{phone}/{temCode}")
//    public Result<Boolean> sendSMSCode(@PathVariable String phone, @PathVariable String temCode) {
//        log.info("发送短信验证码：{},模板：{}", phone, temCode);
//        ValueChecker.checkChinaPhoneNumber(phone);
//        ValueChecker.checkNotEmpty(temCode, "模板编号不能为空");
//        return Result.success(authService.sendSMSCode(phone,temCode));
//    }
//
//    /**
//     * 验证验证码
//     *
//     * @param phone 手机号
//     * @param code  验证码
//     * @return
//     */
//    @GetMapping("/verifyCode")
//    @Log(title = "验证验证码", businessType = BusinessType.OTHER)
//    @SaIgnore
//    public Result<SMSTokenVo> verifyCode(@RequestParam String phone, @RequestParam String code, @RequestParam String operation) {
//        ValueChecker.checkNotEmpty(phone, "手机号不能为空");
//        ValueChecker.checkNotEmpty(code, "验证码不能为空");
//        ValueChecker.checkNotEmpty(operation, "操作类型不能为空");
//        return Result.success(authService.verifyCode(phone, code, operation));
//    }
//
//    /**
//     * 忘记密码
//     *
//     * @param forgetPasswordDto 忘记密码
//     * @return 忘记密码
//     */
//    @PostMapping("/forgetPassword")
//    @Log(title = "忘记密码", businessType = BusinessType.OTHER)
//    @SaIgnore
//    public Result<Boolean> forgetPassword(@RequestBody @Valid ForgetPasswordDto forgetPasswordDto) {
//        return Result.success(authService.forgetPassword(forgetPasswordDto));
//    }

}
